package com.desire.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @author desire
 */
@Component
public class RoutingConfig {
    @Bean
    DirectExchange directExchange() {
        return new DirectExchange("directExchange");
    }

    @Bean
    Queue queue() {
        /**
         * 构造一个新队列，给定名称、持久性标志、自动删除标志和参数。
         * 形参: Name—队列的名称—不能为空;设置为“”，让代理生成名称。
         *      durable——如果我们声明一个持久队列(队列将会在服务器重启)
         *      exclusive独家——如果我们是宣布了一个高级队列(队列将只用于庄家的连接)
         *      autoDelete——真正的如果服务器应该删除队列时不再使用的参数,参数用于声明队列
         *      arguments: 参数Map 设置一些参数 Message TTL  | Auto expire  | Max length  | Max length bytes
         *                                   Dead letter exchange  | Dead letter routing key  | Maximum priority | Lazy mode
         * */
        Map<String, Object> map = new HashMap<>();
        /** 队列ttl 控制整个队列的所有消息的过期时间，时间一到，就会清空消息队列 */
        map.put("x-message-ttl", 100000);
        return new Queue("queue", true, false, false, map);
    }

    @Bean
    Binding binding(DirectExchange directExchange, Queue queue) {
        return BindingBuilder.bind(queue).to(directExchange).with("info");
    }
}
